웹 개발

SecurityOps_02_보안 및 운영 강화

작성자 : Heehyeon Yoo|2026-01-14
# security-ops# DevSecOps# hardening# monitoring

개요

이전 포스트에서 만든 Security Ops 대시보드의 보안성과 운영 안정성을 더 끌어올리는 작업이다.
초기 구축 이후 드러난 공격표면(Attack Surface)을 줄이고 데이터 신뢰도를 높이는 데 집중했다.

Attack Surface Reduction(공격표면 축소)

기존에는 개발 편의를 위해 일부 서비스가 0.0.0.0 인터페이스에 바인딩돼 있었다.
이 부분을 다시 점검해 불필요한 외부 노출을 원천 차단했다.

Localhost Binding

Next.js와 AI 서버, Docker Proxy 등이 외부 IP로 스캔되는 문제를 해결하려고 실행 구성을 바꿨다.
package.jsondocker-compose.yml에서 바인딩 주소를 127.0.0.1로 명시해 외부 스캐너(Nmap/Shodan)에서는 SSH와 HTTP 같은 필수 포트만 보이도록 조치했다.

services:
  chatbot:
    ports:
      - "127.0.0.1:8080:8080"

Dashboard Filtering(필터링 고도화)

내부 루프백 인터페이스에 바인딩된 서비스가 대시보드에서는 'Open Port'로 표기되는 문제가 있었다.
이 때문에 실제 위협을 골라내는 데 방해가 됐다.

Filtering Logic

ss -tlnp 수집 단계에서 로컬호스트(127.0.0.1, [::1]) 바인딩 포트를 제외하는 필터링 로직을 스캐너(shodan_scan.py)에 추가했다.
이제 대시보드는 외부에서 접근 가능한 유효 공격표면만 시각화한다.

Data Privacy(데이터 프라이버시)

Public Dashboard 특성상 상세 운영 데이터가 그대로 노출되지 않도록 마스킹 정책을 적용했다.

Privacy Policy

Public View에서는 포트 목록과 IP 주소를 마스킹 처리해 인프라 정보를 보호한다.
로그 메시지에도 자동 Truncation을 적용했다.
Admin 권한으로 접근할 때만 원본 데이터를 확인할 수 있도록 뷰를 분리했다.

Resilience(운영 탄력성)

Restart Policy

Docker Compose의 모든 컨테이너에 restart: always 정책을 적용했다.
서버 정기 점검이나 예기치 않은 리부팅 뒤에도 수동 개입 없이 보안 모니터링 파이프라인이 자동 복구되도록 구성했다.

다음 단계

  • Admin Action: 대시보드 내 IP 차단 등 Active Response 기능 구현
  • Notification: Webhook 기반 이상 징후 알림 연동